package cbm.commons;

import java.io.IOException;
import java.util.List;
import java.util.ResourceBundle;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.HttpRequestHandlerServlet;
import org.springframework.web.context.support.WebApplicationContextUtils;

import ejb.cbm.admin.bean.ParametroBean;
import ejb.cbm.admin.bean.TipoParametroBean;
import ejb.cbm.admin.entity.ParametroEntity;
import ejb.cbm.admin.entity.TipoParametroEntity;
import ejb.cbm.admin.entity.TransaccionEntity;
import ejb.cbm.admin.local.ParametroFacadeLocal;
import ejb.cbm.seguridad.bean.OficinaBean;
import ejb.cbm.seguridad.bean.PerfilBean;
import ejb.cbm.seguridad.local.PerfilFacadeLocal;
import ejb.cbm.seguridad.local.UtilSeguridadFacadeLocal;
import ejb.com.bbva.cbm.dominio.DenominacionEntity;
import ejb.com.bbva.cbm.service.AdministracionServiceLocal;
import ejb.com.bbva.cbm.util.CacheDatos;

//public class InicializacionServlet extends HttpServlet {
public class InicializacionServlet extends HttpRequestHandlerServlet  {

	PerfilFacadeLocal perfilFacadeLocal;
	ParametroFacadeLocal parametroFacadeLocal;
	UtilSeguridadFacadeLocal utilSeguridadFacadeLocal;

	AdministracionServiceLocal administracionServiceLocal;
	
	ResourceBundle resources = ResourceBundle.getBundle("continuidadweb");
	
	@Autowired
	public void setPerfilFacadeLocal(PerfilFacadeLocal perfilFacadeLocal) {
		this.perfilFacadeLocal = perfilFacadeLocal;
	}
	
	@Autowired
	public void setParametroFacadeLocal(
			ParametroFacadeLocal parametroFacadeLocal) {
		this.parametroFacadeLocal = parametroFacadeLocal;
	}
	
	@Autowired
	public void setUtilSeguridadFacadeLocal(
			UtilSeguridadFacadeLocal utilSeguridadFacadeLocal) {
		this.utilSeguridadFacadeLocal = utilSeguridadFacadeLocal;
	}
	
	@Autowired
	public void setAdministracionServiceLocal(AdministracionServiceLocal administracionServiceLocal) {
		this.administracionServiceLocal = administracionServiceLocal;
	}
	
	public InicializacionServlet() {
		super();
	}

	public void destroy() {
		super.destroy(); 
		
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		processRequest(request,response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		processRequest(request,response);
	}

	public void init() throws ServletException {
		ServletContext servletContext = super.getServletContext();
		List<PerfilBean> perfiles = null;
		List<ParametroBean> estadosregistroingreso = null;
		List<OficinaBean> oficinasBean = null;
		Context context = null;
		TipoParametroBean estadoRegistro = null;
		TipoParametroBean estadoConfirmacion = null;
		TipoParametroBean tipoPerfil = null;
		String codigoUnicoTipoParametro = null;
		Long codigoTipoParametro = null;
		TipoParametroBean habilitado = null;
		TipoParametroBean puestos = null;
		TipoParametroBean tiporegistro = null;
		
		System.out.print("[---------INICIADO LA APLICACION DE CONTINUIDAD DE NEGOCIOS---------]");
		
		try{
		
			System.out.print("[INICIADO PARAMETROS DE CONTEXTO]");
			
			context = new InitialContext();
			
			//parametroFacadeLocal     = (ParametroFacadeLocal)context.lookup("ejblocal:CBM/ParametroService/local");
			//utilSeguridadFacadeLocal = (UtilSeguridadFacadeLocal)context.lookup("ejblocal:CBM/UtilSeguridadService/local");
			//perfilFacadeLocal        = (PerfilFacadeLocal)context.lookup("ejblocal:CBM/PerfilService/local");
			/*
			
			utilSeguridadFacadeLocal = new UtilSeguridadFacade();
			perfilFacadeLocal = new PerfilFacade();*/
			/*
			SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,getServletConfig().getServletContext());
			
			parametroFacadeLocal = new ParametroFacade();*/
			
			ApplicationContext springcontext = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); 
			perfilFacadeLocal = (PerfilFacadeLocal) springcontext.getBean("perfilFacadeLocal");
			parametroFacadeLocal = (ParametroFacadeLocal) springcontext.getBean("parametroFacadeLocal");
			utilSeguridadFacadeLocal = (UtilSeguridadFacadeLocal) springcontext.getBean("utilSeguridadFacadeLocal");
			administracionServiceLocal = (AdministracionServiceLocal) springcontext.getBean("administracionServiceLocal");
			
			
			codigoUnicoTipoParametro = resources.getString("ESTADOS_REGISTRO");
			estadoRegistro = parametroFacadeLocal.findByCodigoUnico(codigoUnicoTipoParametro);
			
			codigoUnicoTipoParametro = resources.getString("ESTADOS_CONFIRMACION");
			estadoConfirmacion = parametroFacadeLocal.findByCodigoUnico(codigoUnicoTipoParametro);
			
			codigoUnicoTipoParametro = resources.getString("TIPOS_PERFIL");
			tipoPerfil = parametroFacadeLocal.findByCodigoUnico(codigoUnicoTipoParametro);
			
			codigoUnicoTipoParametro = resources.getString("HABILITADO");
			habilitado = parametroFacadeLocal.findByCodigoUnico(codigoUnicoTipoParametro);
			
			codigoUnicoTipoParametro = resources.getString("PUESTOS");
			puestos = parametroFacadeLocal.findByCodigoUnico(codigoUnicoTipoParametro);

			codigoUnicoTipoParametro = resources.getString("TIPO_REGISTRO");
			tiporegistro     = parametroFacadeLocal.findByCodigoUnico(codigoUnicoTipoParametro);

			servletContext.setAttribute(ConstantsWeb.PERFILES, perfilFacadeLocal.buscar(new PerfilBean()));
			servletContext.setAttribute(ConstantsWeb.ESTADOS_REGISTRO, estadoRegistro.getParametros());
			servletContext.setAttribute(ConstantsWeb.ESTADOS_CONFIRMACION_INGRESO, estadoConfirmacion.getParametros());
			servletContext.setAttribute(ConstantsWeb.OFICINAS, utilSeguridadFacadeLocal.obtenerOficinas());
			servletContext.setAttribute(ConstantsWeb.TIPO_PERFIL, tipoPerfil.getParametros());
			servletContext.setAttribute(ConstantsWeb.HABILITADO, habilitado.getParametros());
			servletContext.setAttribute(ConstantsWeb.PUESTOS, puestos.getParametros());
			servletContext.setAttribute(ConstantsWeb.TIPO_REGISTRO, tiporegistro.getParametros());
			
			List<TipoParametroEntity> tiposParametro = administracionServiceLocal.obtenerTiposParametrosTodos();
			List<ParametroEntity> parametros = administracionServiceLocal.obtenerParametrosTodos();
			List<TransaccionEntity> transacciones  = administracionServiceLocal.obtenerTransaccionesInicioAplicacion();
			List<DenominacionEntity> denominaciones = administracionServiceLocal.obtenerDenominaciones();
			
			CacheDatos cache = CacheDatos.getInstance();
			
			cache.cargarDatosParametros(tiposParametro, parametros);
			cache.setConfiguracionTransacciones(transacciones);
			cache.setDenominaciones(denominaciones);
			
			cache.cargarDatosPametrosCache(tiposParametro);
			
			servletContext.setAttribute("cache", cache);
			
			System.out.print("[INICIO PARAMETROS DE CONTEXTO FINALIZADO]");
		
		}catch(Exception e){
			e.printStackTrace();
		}
			
	}
	
	public void processRequest(HttpServletRequest request, HttpServletResponse response){
		response.setContentType("text/html");
		
	}

}
